package thinkingInJava.containers.Test_;
// page 对比各种 set 的性能
//: containers/SetPerformance.java
//Demonstrates performance differences in Sets.
//{Args: 100 5000} Small to keep build testing short
import java.util.*;

public class SetPerformance {
static List<Test<Set<Integer>>> tests =
 new ArrayList<Test<Set<Integer>>>();
static {
 tests.add(new Test<Set<Integer>>("add") {
   int test(Set<Integer> set, TestParam tp) {
     int loops = tp.loops;
     int size = tp.size;
     for(int i = 0; i < loops; i++) {
       set.clear();
       for(int j = 0; j < size; j++)
         set.add(j);
     }
     return loops * size;
   }
 });
 tests.add(new Test<Set<Integer>>("contains") {
   int test(Set<Integer> set, TestParam tp) {
     int loops = tp.loops;
     int span = tp.size * 2;
     for(int i = 0; i < loops; i++)
       for(int j = 0; j < span; j++)
         set.contains(j);
     return loops * span;
   }
 });
 tests.add(new Test<Set<Integer>>("iterate") {
   int test(Set<Integer> set, TestParam tp) {
     int loops = tp.loops * 10;
     for(int i = 0; i < loops; i++) {
       Iterator<Integer> it = set.iterator();
       while(it.hasNext())
         it.next();
     }
     return loops * set.size();
   }
 });
}
public static void main(String[] args) {
 if(args.length > 0)
   Tester.defaultParams = TestParam.array(args);
 Tester.fieldWidth = 10;
 Tester.run(new TreeSet<Integer>(), tests);
 Tester.run(new HashSet<Integer>(), tests);
 Tester.run(new LinkedHashSet<Integer>(), tests);
}
} /* Output: (Sample)
------------- TreeSet -------------
size       add  contains   iterate
10       746       173        89
100       501       264        68
1000       714       410        69
10000      1975       552        69
------------- HashSet -------------
size       add  contains   iterate
10       308        91        94
100       178        75        73
1000       216       110        72
10000       711       215       100
---------- LinkedHashSet ----------
size       add  contains   iterate
10       350        65        83
100       270        74        55
1000       303       111        54
10000      1615       256        58
*///:~

